package com.gzyz.cheetah.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gzyz.cheetah.entity.dto.PageDTO;
import com.gzyz.cheetah.entity.pagerequest.UserPageRequestRequest;
import com.gzyz.cheetah.entity.table.User;

import java.util.List;

/**
 * <p>
 * 用户 服务类
 * </p>
 *
 * @author xclhove
 * @since 2023-11-06
 */
public interface IUserService extends IService<User> {
    /**
     * 用户登录
     * @param username 用户名
     * @param password 密码
     * @return token字符串
     */
    public String login (String username, String password);
    
    /**
     * 用户注册
     * @param user 用户信息
     * @return 是否注册成功
     */
    public boolean register(User user);
    
    /**
     * 用户退出登录
     * @param userId 用户id
     * @return 是否退出成功
     */
    public boolean logout(Integer userId);
    
    /**
     * 通过用户id冻结用户
     * @param userId 用户id
     * @return 是否冻结成功
     */
    public boolean freezeUserById(Integer userId);
    /**
     * 通过用户id解冻用户
     * @param userId 用户id
     * @return 是否解冻成功
     */
    public boolean unFreezeUserById(Integer userId);
    /**
     * 通过用户id列表冻结用户
     * @param userIds 用户id列表
     * @return 是否冻结成功
     */
    public boolean freezeUsersByIds(List<Integer> userIds);
    /**
     * 通过用户id列表解冻用户
     * @param userIds 用户id列表
     * @return 是否解冻成功
     */
    public boolean unFreezeUsersByIds(List<Integer> userIds);

    /**
     * @author young
     */
    public boolean resetpassword(Integer id);

    /**
     * @author young
     */
    public boolean delete(Integer id);

    /**
     * @author young
     */

    PageDTO<User> pageListAndSearch(UserPageRequestRequest userPageRequest);
    /**
     * @author young
     */
    public boolean changepassword(Integer id,String password);

    public boolean update(User user);

    public boolean deleteByIds(List<Integer> userIds);


    public User searchUser(int id);

    public boolean verifyAndChangePass(String code, String password,String email);

    public String getCode(String username,String email);
    
    boolean changeStorageSize(User user);
}